<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
// Object.defineProperty()数据劫持/数据代理
// 利用JavaScript引擎赋予的功能，检测对象属性变化
// Object.defineProperty(obj, prop, descriptor) ==> obj:要定义属性的对象  prop：要定义或修改的属性名称或symbol  descriptor：要定义或修改的属性描述
// 返回值：被传递给函数的对象
var obj = { }
var empty//getter和setter需要变量周转才能工作，才能成功修改a的值
Object.defineProperty(obj, 'a', {
  get() {
    console.log('get访问obj的a属性')
    // return 2
    return empty//让get返回中介的值，set修改中介的值

  },
  set(val) {
    empty = val//添加中介
    console.log('set修改obj的a属性' + val)//obj.a++时，set去修改了（此时val为3），但是没有中介修改不成功
  }
})

obj.a=3
console.log(obj.a)//当get返回a=2时，obj.a++不起作用，获得到的a还是2（需要中介周转变量）
obj.a = 6//添加了中介后再修改a，set修改并能成功获取
console.log(obj.a)//所有a=6
  </script>
</body>
</html>
